iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Security

密碼學小白的學習之路系列 第 4

[Day4]題目(Intro- 4、5) & Hex 介紹 & Base64、Base32 簡單介紹

  • 分享至 

  • xImage
  •  

Intro-4 Hex

https://cryptohack.org/courses/intro/enc2/
https://ithelp.ithome.com.tw/upload/images/20240810/20168165XciNo1IzlH.png

題意:

  • 將密文轉換為十六進位格式可以使其更便於分享和傳輸。

解法:

  • 將十六進位格式的密文轉換為bytes類型。

hint:

bytes.fromhex() #將一個十六進制字符串轉換為 bytes 類型
.hex() # 將 bytes 類型的數值轉換為一個十六進制字符串

程式碼:

c='63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d'
print(bytes.fromhex(c)) 

crypto{You_will_be_working_with_hex_strings_a_lot}

Hex 介紹

Hex(Hexadecimal),也就是base16

  • 使用16個符號(0-9和A-F)來表示數值。
  • 每個十六進位數字代表4個位元,而4位元組成一個半位元組(nybble)。(4位元=1/2位元組)
  • 轉換為ASCII時,每兩個十六進位數字對應一個ASCII字符。(因為一個十六進位數字4位元,一個ASCII字符8位元)

將十六進位數字轉換為ASCII字符的例子:

  • Hexadecimal: 48 65 6C 6C 6F

  • Step-by-Step Conversion:

    • 48 (十六進位) → 72 (十進位) → H (ASCII字符)
    • 65 (十六進位) → 101 (十進位) → e (ASCII字符)
    • 6C (十六進位) → 108 (十進位) → l (ASCII字符)
    • 6C (十六進位) → 108 (十進位) → l (ASCII字符)
    • 6F (十六進位) → 111 (十進位) → o (ASCII字符)
  • Result: 48 65 6C 6C 6F 轉換為 ASCII 為 Hello

Intro-5 Base64

https://cryptohack.org/courses/intro/enc3/
https://ithelp.ithome.com.tw/upload/images/20240810/20168165Zj0GcKmPTB.png

題意:

  • 把十六進位字串轉成位元組,再把它編碼成Base64,這樣可以更方便地在網路上傳輸資料。

解法:

  • 將十六進位字串先轉換成位元組,再將其進一步轉換為Base64字串。

hint:

base64.b64encode() #將bytes類型的二進制數據編碼轉換為 Base64 格式的字符串。

程式碼與簡要註解:

import base64  # 匯入 base64 模組,用於進行 Base64 編碼
s = '72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf'  # 加密後的數據
byte_data = bytes.fromhex(s) #轉換後的 bytes 數據
base64_encoded = base64.b64encode(byte_data) # 將byte_data進行 Base64 編碼,轉換為字符串格式
print(base64_encoded)  

crypto/Base+64+Encoding+is+Web+Safe

Base64 簡單介紹

  • Base64

    • 使用數字 0-9、大寫字母 A-Z、小寫字母 a-z、以及符號 "+""/"(共64個字符)。
    • 使用 "=" 作為填充符號。
  • Base64url

    • 使用 "-" 代替 "+""_" 代替 "/"
    • 適用於避免在路徑或網址中使用 "/" 符號。

既然base16、base64都介紹了,那就順便介紹一下base32吧

Base32 簡單介紹

  • Base32

    • 使用數字 2-7(6個)和字母 A-Z(26個),共32個字元。
    • 使用 "=" 作為填充符號。
  • Base32hex

    • Base32 的變體。
    • 使用數字 0-9 和字母 A-V(共32個字元)。(和hex同樣使用數字0-9)
    • 同樣使用 "=" 作為填充符號。

參考資料:

  • 筆記
  • 加密‧解謎‧密碼學

後話:

嗚呼,終於打完了, 今天又是很趕地發了,來不及勘誤,如果有發現錯誤或想友善交流歡迎留言~


上一篇
[Day3] 題目(Intro- 3) & ASCII code介紹 & leet介紹
下一篇
[Day5] 題目(Intro- 6、7) & Xor 介紹 & Python第三方庫安裝
系列文
密碼學小白的學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言